package com.haust.leyou.service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.haust.leyou.mapper.BrandMapper;
import com.haust.leyou.pojo.Brand;
import com.haust.leyou.vo.PageResult;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * @Auther: csp1999
 * @Date: 2020/12/08/19:53
 * @Description:
 */
@Service
public class BrandService {

    @Autowired
    private BrandMapper brandMapper;

    /**
     * 根据查询条件,查询品牌相关的数据信息,并返回一个PageResult对象
     *
     * @param key
     * @param page
     * @param rows
     * @param sortBy
     * @param desc
     * @return
     */
    public PageResult<Brand> queryBrandsByPage(String key, Integer page, Integer rows, String sortBy, Boolean desc) {

        /**
         * 0.初始化example对象
         */
        Example example = new Example(Brand.class);
        Example.Criteria criteria = example.createCriteria();// 用于example添加条件

        if (StringUtils.isNotBlank(key)) {
            // 根据品牌名称和品牌首字母模糊查询
            criteria.andLike("name", "%" + key + "%").orEqualTo("letter", key);
        }

        /**
         * 1.添加分页条件
         */
        PageHelper.startPage(page, rows);

        /**
         *  2.添加排序条件
         */
        if (StringUtils.isNotBlank(sortBy)) {
            example.setOrderByClause(sortBy + " " + (desc ? "desc" : "asc"));
        }

        /**
         * 3.根据example条件查询,获得品牌Brand 集合对象
         */
        List<Brand> brandList = brandMapper.selectByExample(example);

        /**
         * 4.brandList包装成PageInfo对象
         */
        PageInfo<Brand> pageInfo = new PageInfo<>(brandList);

        /**
         * 5.将PageInfo 包装成PageResult对象并返回
         */
        return new PageResult<>(pageInfo.getTotal(), pageInfo.getList());
    }

    /**
     * 新增品牌
     *
     * @param brand
     * @param cids
     */
    @Transactional
    public void saveBrand(Brand brand, List<Long> cids) {
        // 1.先新增brand表(自动封装自增的品牌id到brand对象中)
        boolean flag = brandMapper.insertSelective(brand) == 1;
//        System.out.println(brand);//Brand{id=325402, name='Java编程思想', image='', letter=J}
        // 2.再新增中间表
        if (flag) {
            cids.forEach(cid -> {
                brandMapper.insertBrandAndCategory(cid, brand.getId());
            });
        }
    }

    /**
     * 根据分类cid 查询品牌列表
     *
     * @param cid
     * @return
     */
    public List<Brand> queryBrandsByCid(Long cid) {

        return brandMapper.selectBrandsByCid(cid);
    }

    /**
     * 根据品牌id 查询品牌信息
     *
     * @param id
     * @return
     */
    public Brand queryBrandById(Long id) {
        return brandMapper.selectByPrimaryKey(id);
    }
}
